シリアル通信機能の使い方

シリアル通信機能を持った周辺回路を、USART(Universal Synchronous Asynchronous Receiver Transmitter) とも言います(USART はシリアル通信インターフェイス、SCI とも呼ばれます)。この機能により、全二重非同期システムとしてパソコンと通信できるようになります。(または、半二重同期システムとしてシリアルEEPROM と通信できる構成もあります。)


<項目>USARTの制御用レジスタ
シリアル通信関連の制御用レジスタとして、TXSTA,RCSTA,SPBREGの3種類のレジスタがあります。まず、これらの内容と機能を把握する必要があります。

(A)TXSTAレジスタ(Bank1)
TXSTAレジスタの構成は図1のようになっていて、送信の動作モードを指定します。

TXSTAレジスタの構成
図1. TXSTAレジスタの構成



TXSTAレジスタの機能について、表1に示します。

表1.TXSTAレジスタの機能説明
bit 名称 機能 データ 意味
 7  CSRC   クロック選択  
指定ビット
非同期 非同期モードでは無視
同期 マスターモード(内部でBRG から発生するクロック)
スレーブモード(外部ソースからのクロック)
 6  TX9 9 ビット送信
モード指定ビット
9ビット送信を選択
8ビット送信を選択
 5  TXEN 送信許可
指定ビット
許可
禁止
 4   SYNC  USART モード
選択ビット
同期モード
非同期モード
 3  なし 「0」とリードされる
 2  BRGH   高速ボーレート  
選択ビット
非同期 高速
低速
同期 同期モードでは無視
 1  TRMT 送信レジスタ
ステータスビット
TSR が空
TSR がフル
 0  TX9D 送信データの第9 ビット パリティビットとして使用可能




(B)RCSTAレジスタ(Bank0)
RCSTAレジスタの構成は図2のようになっていて、受信の動作モードを指定します。

RCSTAレジスタの構成
図2. RCSTAレジスタの構成



RCSTAレジスタの機能について、表2に示します。

表2.RCSTAレジスタの機能説明
bit 名称 機能 データ 意味
 7  SPEN シリアルピン指定ビット シリアルポートを許可
(RC7/RX/DT およびRC6/TX/CK ピンは
シリアルポートピンとして構成)
シリアルポートを禁止
(RC7/RX/DT およびRC6/TX/CK ピンは
汎用ポートピンとして構成)
 6  RX9 9 ビット受信
モード指定ビット
9ビット受信を選択
8ビット受信を選択
 5  SREN シングル受信許可
指定ビット
非同期 非同期モードでは無視
同期 スレーブ 使用しません。
マスター 許可
禁止
 4   CREN  連続受信許可ビット 非同期 連続受信は許可
連続受信は禁止
同期 CREN がクリアされるまでは連続受信可能
(CREN はSREN をオーバーライドする)
連続受信は禁止
 3  ADDEN アドレス検出許可ビット アドレス検出は許可、RSR<8>が1 のとき、
受信バッファの割り込みとロードが許可
アドレス検出は禁止、全バイトを受信、
第9 ビットはパリティビットとして使用可能
FERR フレーミングエラー
ステータスビット
フレーミングエラー(RCREG レジスタのリードにより
更新でき、次の有効バイトを受信する)
フレーミングエラーなし
 1  OERR オーバーランエラー
ステータスビット
オーバーランエラー
(ビットCREN のクリアによりクリア可能)
オーバーランエラーなし
 0  RX9D 受信データの第9 ビット パリティビットとして使用可能



(C)SPBRGレジスタ(Bank1)
SPBRGレジスタにより、通信速度を決めます。このSPBRGレジスタの設定値とボーレートの関係を表3に示します。(MicroChip社 データシート参照)

表3−1.SPBRGの設定値とボーレート(非同期:低速モードの例)
クロック 20MHz 16MHz 10MHz
ボーレート
(bps)
SPBRG
設定値
エラー
レート
SPBRG
設定値
エラー
レート
SPBRG
設定値
エラー
レート
10進 16進 10進 16進 10進 16進
1200 D’255’ H’0FF’ +1.73 D’207’ H’0CF’ +0.16 D’129’ H’81’ +0.16
2400 D’129’ H’81’ +0.16 D’103’ H’67’ +0.16 D’64’ H’40’ +0.16
9600 D’32’ H’20’ −1.36 D’25’ H’19’ +0.16 D’15’ H’0F’ +1.73
19.2k D’15’ H’0F’ +1.73 D’12’ H’0C’ +0.16 D’7’ H’7’ +1.73
76.8k D’3’ H’3’ +1.73 D’2’ H’2’ +8.51 D’1’ H’1’ +1.73


表3−2.SPBRGの設定値とボーレート(非同期:高速モードの例)
クロック 20MHz 16MHz 10MHz
ボーレート
(bps)
SPBRG
設定値
エラー
レート
SPBRG
設定値
エラー
レート
SPBRG
設定値
エラー
レート
10進 16進 10進 16進 10進 16進
9600 D’129’ H’81’ +0.16 D’103’ H’67’ +0.16 D’64’ H’40’ +0.16
19.2k D’64’ H’40’ +0.16 D’51’ H’33’ +0.16 D’32’ H’20’ −1.36
38.4k D’32’ H’20’ −1.36 D’25’ H’19’ +0.16 D’15’ H’0F’ +1.7
57.6k D’21’ H’15’ −1.36 D’16’ H’10’ +2.12 D’10’ H’0A’ −1.36
115.2k D’10’ H’0A’ −1.36 D’8’ H’8’ −3.55 D’4’ H’4’ +8.51


表4に、ボーレートの計算式を示します。これはマスターモード(内部クロック)のみに適用されます。希望のボーレートとFOSC を当てはめれば、表4の式を使用してSPBRG レジスタの最も近い整数値を計算できます。この値からボーレートのエラーを判定することができます。

表4.ボーレートの計算式
モード 設定 ボーレート計算式
ボーレート=
 SYNC   BRGH 
非同期 低速 OSC/(64(X+1))
高速 OSC/(16(X+1))
同期 OSC/(4(X+1))


例として、FOSC 16MHz 希望のボーレート=9600(非同期:低速モード)の条件でのボーレートエラーの計算例を示します。

表4より、希望のボーレート=FOSC/(64(X+1))
             9600=16000000/(64(X+1))
               X≒25 となる。

ここで、算出ボーレート=16000000/(64×(25+1))=9615

エラー=( [算出ボーレート]−[希望ボーレート] )/ [希望ボーレート」
    =(9615−9600)/9600=0.16%
というように求めます。

遅いボークロックに関しても高速ボーレート(BRGH=1)を使用したほうがよい場合があります。これは、場合によって、FOSC/(16(X + 1))のほうがボーレートエラーが小さい場合です。


<項目>USART 非同期モード
このモードでは、USARTは標準のノン・リターン・トゥ・ゼロ(NRZ)フォーマット(1 スタートビット、8 または9 データビット、1 ストップビット)を使用します。最もよく使用されるデータフォーマットは8 ビットです。オン・チップ専用8 ビットボーレート発生器を使用して、オシレータから標準ボーレート周波数をつくることができます。USART はLSBから先に送信および受信します。USART のトランスミッターとレシーバーは機能的には独立していますが、同じデータフォーマットとボーレートを使用します。ボーレート発生器は、ビットBRGH(TXSTA<2>)により、シフトレートがX16 またはX64 のどちらかのクロックを生成します。パリティはハードウエアではサポートされていませんが、ソフトウエアで作成可能です(第9 データビットに格納する)。非同期モードはスリープ中は停止します。非同期モードはビットSYNC(TXSTA<4>)をクリアすることにより選択します。
USART 非同期モジュールは主に次の要素から成ります。



<項目>USART 非同期トランスミッター
USART トランスミッターのブロック図を図3に示します。

USART トランスミッターのブロック図
図3.USART トランスミッターのブロック図(MicroChip社データシート参照)

トランスミッターの中心部は送信(シリアル)シフトレジスタ(TSR )です。シフトレジスタはリード/ライト送信バッファ、TXREG からデータがロードされます。TXREG レジスタにはソフトウエアでデータがロードされます。TSR レジスタは前のロードのSTOPビットが送信されるまでロードされません。STOP ビットが送信されると、TSR には直ちにTXREG レジスタからの新規データが(あれば)ロードされます。TXREGレジスタがTSR レジスタにデータを転送すると(1TCYで実行)TXREG レジスタは空になり、フラグビットTXIF(PIE1<4>)がセットされます。この割り込みはイネーブルビットTXIE(PIE1<4>)をセット/クリアすることによりイネーブル/ディセーブルできます。フラグビットTXIF はTXIE に関係なくセットされ、ソフトウエアではクリアできません。このビットはTXREG レジスタに新しいデータがロードされたときにのみリセットします。フラグビットTXIF はTXREG レジスタのステータスを示し、別のビットTRMT(TXSTA<1>)はTSR レジスタのステータスを示します。ステータスビットTRMT はTSR レジスタが空のときにセットされるリード・オンリービットです。このビットは割り込みとは連動しません。TSR レジスタが空かどうかを判定するために、このビットをポーリングできます。

<注意事項>

  1. TSR レジスタはデータメモリ内には配置されていないので、ユーザーが使用する
    ことはできません。
  2. フラグビットTXIF はイネーブルビットTXEN がセットされたときにセットされます。


非同期送信のセットアップ手順(MicroChip社データシート参照)

  1. SPBRG レジスタを適切なボーレートで初期化します。高速ボーレートを希望する場合、ビットBRGH をセットします。
  2. ビットSYNC をクリアしてビットSPEN をセットすることにより非同期シリアルポートを動作させます。
  3. 割り込みが必要な場合は、イネーブルビットTXIE をセットします。
  4. 9 ビットの送信が必要な場合は、送信ビットTX9をセットします。
  5. ビットTXEN をセットすることにより送信をイネーブルにします。これによりTXIF ビットもセットされます。
  6. 9 ビット送信を選択した場合、第9 ビットはビットTX9D にロードされる必要があります。
  7. TXREG レジスタにデータをロードします(送信を開始します)



<項目>USART 非同期レシーバー
USART レシーバーのブロック図を図4に示します。

USARTレシーバのブロック図
図4.USARTレシーバのブロック図(MicroChip社データシート参照)

データは、RC7/RX/DT ピンに受信されてデータ回復ブロックをドライブします。データ回復ブロックは実際はX16倍ボーレートで動作する高速シフタです。なお、メイン受信シリアルシフタはビットレートまたはFOSC で動作します。USART モジュールにはマルチ・プロセッサ通信用の特別な機能があります。RX9 ビットがRCSTA レジスタにセットされると、9 ビットが受信されて、第9 ビットはRCSTA レジスタのRX9D ステータスビットに配置されます。ポートは、ストップビットを受信したときにRX9D ビット=1 のときのみシリアルポート割り込みが発生するようにプログラムすることができます。この機能はRCSTA レジスタにADDEN ビットRCSTA<3>をセットすることにより動作できるようになります。この機能は次のようなマルチ・プロセッサシステムで使用できます。
マスタープロセッサは1 ブロックのデータを複数のスレーブの1 つに送信しようとします。プロセッサはまず目標のスレーブを識別するアドレスバイトを送信しなければなりません。アドレスバイトはRX9D ビットが「1」であることにより識別されます(データバイトは「0」)。ADDEN ビットがスレーブのRCSTA レジスタでセットされている場合、すべてのデータバイトは無視されます。しかし、第9 受信バイトが「1 」の場合、受信バイトがアドレスであることを示すので、スレーブは割込み発生して、RSR レジスタの内容が受信バッファに転送されます。これにより、スレーブはアドレスのみ割込み発生でき、スレーブがアドレス指定されたかどうか確認できるようにします。アドレス指定されたスレーブはそのADDEN ビットをクリアしてマスターからのデータバイトを受信する準備をします。
ADDEN がセットされると、すべてのデータバイトは無視されます。STOP ビットの次にはデータバイトは受信バッファにロードされず、割り込みは発生しません。別のバイトがRSR レジスタにシフトインされた場合、前のデータバイトはなくなります。ADDEN ビットはレシーバーが9 ビット非同期モードで構成されているときのみ有効です。
一度非同期モードを選択すると、受信はビットCREN(RCSTA<4>)をセットすることによりイネーブルになります。


アドレス機能のついた非同期受信のセットアップ手順
(MicroChip社データシート参照)

  1. SPBRG レジスタを適切なボーレートで初期化します。高速ボーレートが必要な場合は、ビットBRGH をセットします。
  2. ビットSYNC をクリアして、および、ビットSPEN をセットすることにより非同期シリアルポートを動作させます。
  3. 割り込みが必要な場合は、イネーブルビットRCIEをセットします。
  4. ビットRX9 をセットして9 ビット受信をイネーブルにします。
  5. ADDEN をセットしてアドレス検出をイネーブルにします。
  6. イネーブルビットCREN をセットすることにより受信をイネーブルにします。
  7. 受信が完了するとフラグビットRCIF がセットされます。イネーブルビットRCIE がセットされた場合は割込みが発生します。
  8. RCSTA レジスタをリードして、第9 ビットをリード、および、受信中に何かエラーが発生したかどうかを判定します。
  9. RCREG レジスタのリードにより8 ビットの受信データをリードして、アドレス指定されたかどうか判定します。
  10. エラーが発生した場合、イネーブルビットCREN をクリアしてエラーをクリアします。
  11. デバイスがアドレスされた場合、ADDEN ビットをクリアして、データバイトとアドレスバイトを受信バッファにリードして、CPU を割込みできるようにします。



<戻る> <次ページへ>
<TOPページへ>



テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル